gusucode.com > 基于VBLAST-OFDM的MATLAB SIMULATION,图形化界面,并且给出了各仿真图 > 基于VBLAST-OFDM的MATLAB SIMULATION,图形化界面,并且给出了各仿真图/vblast-ofdm simulation/receiver.m
function [data_bits, raw_bits] = receiver(rx_signal, cir, SimulationParameters); global SimulationConstants; [n_tx_antennas, n_rx_antennas] = get_n_antennas(SimulationParameters); %no vblast option if SimulationParameters.VBLAST~=1 %remove cyclic prefix if ~SimulationParameters.TxDiv %single tx. antenna rx_signal=rx_signal(:,33:length(rx_signal)); else rx_signal=rx_signal(:,33-16:length(rx_signal)); end % Return to frequency domain [freq_tr_syms, freq_data_syms] = rx_convert_to_freq(rx_signal, SimulationParameters); % Channel estimation channel_est = rx_estimate_channel(freq_tr_syms, cir, SimulationParameters); % receiver diversity processing [freq_data_syms] = rx_diversity(freq_data_syms, ... channel_est, SimulationParameters); % Demodulate soft_bits = rx_demodulate(freq_data_syms, SimulationParameters); % Deinterleave if bits were interleaved if SimulationParameters.InterleavingBits & SimulationParameters.ZeroPad~=1 deint_bits = rx_deinterleave(soft_bits, SimulationParameters); else deint_bits = soft_bits; end % hard decision of soft bits, used to measure uncoded BER raw_bits = deint_bits > 0; % depuncture depunc_bits = rx_depuncture(deint_bits, SimulationParameters.ConvCodeRate); viterbi_input=depunc_bits ; % Viterbi decoding data_bits = rx_viterbi_decode(viterbi_input); else % go VBLAST rx_signal=rx_signal(:,33:length(rx_signal)); % Return to frequency domain [freq_tr_syms, freq_data_syms] = rx_convert_to_freq_vblast(rx_signal, SimulationParameters); if SimulationParameters.ChannelEstimation_LSE~=1 channel_est=form_matrix(SimulationParameters); %perfect channel knowledge end %invoke vblast algorithm [raw_bits]=vblast_method(freq_data_syms,channel_est,SimulationParameters); data_bits=[]; end